package cn.bugstack.types.design.framework.link.model1;

/**
 * @description 单例责任链，由Factory 维护一份责任链，由于是单例，修改一定会改变责任链规则
 * 责任链 抽象类
 * 继承抽象类，创建具体节点，并手动组装这些节点形成责任链。
 */
public abstract class AbstractLogicLink<T, D, R> implements ILogicLink<T, D, R> {

    // 下一个节点
    private ILogicLink<T, D, R> next;

    // 返回下一个节点
    @Override
    public ILogicLink<T, D, R> next() {
        return next;
    }

    // 添加下一个节点
    @Override
    public ILogicLink<T, D, R> appendNext(ILogicLink<T, D, R> next) {
        this.next = next;
        return next;
    }

    // 直接调用下一个节点的处理逻辑，并且返回值
    protected R next(T requestParameter, D dynamicContext) throws Exception {
        return next.apply(requestParameter, dynamicContext);
    }

}
